import request from "../../../utils/request"
const app = getApp();
// pages/my/login/login.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    isModalShow: false, // 控制自定义弹窗的显示与隐藏
    phone: '', // 用于双向绑定输入框的值
    userInfo: '', //获取到的用户信息
    // 新增：登录类型相关
    loginType: "phone", // "phone"=手机号登录，"email"=邮箱登录
    email: "", 
    // 新增：验证码相关（仅邮箱登录用）
    code: '', // 验证码输入值
    codeText: "获取验证码", // 按钮文字
    isCounting: false, // 是否正在倒计时
    countDown: 60 // 倒计时秒数
  },


  // 微信登录
  onGetPhoneNumber(e) {
    const that = this;
    if (e.detail.code) {
      console.log('【wx.getPhoneNumber】获取到加密 code：', e.detail.code);
      // 后端使用 code 换取解密后的真实手机号
      wx.request({
        url: 'http://localhost:8080/wxphoneLogin',
        method: 'POST',
        data: {
          code: e.detail.code
        },
        //登录成功
        success(res) {
          console.log(res.data);
          wx.setStorageSync('token', res.data.token);
          // 登录成功后，可以直接调用获取用户信息的接口
          that.getUserInfo();
        }
      });
    } else {
      console.error('用户拒绝授权获取手机号');
    }
  },

  // 手机号登录（原有逻辑，无需验证码）
  login(phone) {
    const that = this;
    console.log("登录的手机号是" + phone);
    // 调用wx.request发送请求到你的后端
    request({
      // 你的后端登录接口地址（无需验证码的原接口）
      url: '/wxlogin',
      method: 'Get',
      data: {
        phone: phone
      },
      success(res) {
        console.log(res);
        // 登录成功，后端通常会返回一个token
        // 假设后端返回 { code: 200, token: "你的token值" }
        if (res.data.code === 200) {
          // 将token存入本地缓存，方便后续使用
          wx.setStorageSync('token', res.data.token);
          // 登录成功后，可以直接调用获取用户信息的接口
          that.getUserInfo();
        } else {
          // 登录失败，显示后端返回的错误信息
          wx.showToast({
            title: res.data.msg || '登录失败',
            icon: 'none'
          });
        }
      }
    });
  },

  // 新增：邮箱登录（带验证码）- 适配后端参数名 emailCode
emailLogin(email, code) {
  const that = this;
  console.log("登录的邮箱是：" + email + "，验证码是：" + code);
  // 调用封装的request
  request({
    url: '/emaillogin',
    method: 'Get', // 后端是@GetMapping，这里保持Get
    data: {
      email: email,
      // 关键修改：参数名从 code 改为 emailCode，和后端一致
      emailCode: code 
    },
    // 补充：Get请求用表单格式更兼容，避免参数解析问题
    header: {
      'content-type': 'application/x-www-form-urlencoded'
    },
    success(res) {
      console.log(res);
      if (res.data.code === 200) { // 若依AjaxResult.success()默认code=200
        wx.setStorageSync('token', res.data.token);
        that.getUserInfo();
      } else {
        wx.showToast({
          title: res.data.msg || '登录失败',
          icon: 'none'
        });
      }
    }
  });
},

  // 登录成功后，获取用户信息 + tabBar跳转（核心修改：统一用wx.switchTab）
  getUserInfo() {
    const that = this;
    request({
      url: '/getwxInfo', // 调用后端获取用户信息接口
      method: 'GET'
    }).then(userInfoResponse => {
      console.log('获取用户信息成功，后端返回：', userInfoResponse);
      // 1. 提取用户信息（兼容后端返回结构，避免拿空）
      const info = userInfoResponse.data?.user || userInfoResponse.user;

      if (info) {
        // 2. 保存用户信息到本地缓存（供tabBar页面读取）
        wx.setStorageSync('loginUserInfo', info);
        // 3. 保存用户信息到页面data
        that.setData({
          userInfo: info
        });
        console.log("获取到的用户信息：", that.data.userInfo);
        // 关键修改：通过 eventChannel 发送事件
        const eventChannel = that.getOpenerEventChannel();
        if (eventChannel) {
          eventChannel.emit('loginSuccess', {
            success: true
          });
        }

        // 4. 关键：跳转到tabBar页面（必须用wx.switchTab，路径替换成你的tabBar页面路径）
        wx.switchTab({
          url: '/pages/my/my', // 你的tabBar页面路径（如“我的”页面）
          success: () => {
            // 跳转成功提示（提升用户体验）
            wx.showToast({
              title: '登录成功',
              icon: 'success',
              duration: 1500
            });
          },
          // 跳转失败处理（避免无反馈）
          fail(err) {
            console.error('跳转到tabBar页面失败：', err);
            wx.showToast({
              title: '页面跳转失败，请重试',
              icon: 'none'
            });
          }
        });
      } else {
        // 后端返回空用户信息处理
        console.error('获取用户信息失败：后端返回空数据');
        wx.showToast({
          title: '获取用户信息失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      // 获取用户信息请求失败处理
      console.error('获取用户信息失败：', err);
      wx.showToast({
        title: '获取用户信息失败，请重试',
        icon: 'none'
      });
    });
  },


  /**
   * 点击“手机号登录”按钮，显示自定义弹窗
   */
  showCustomModal() {
    this.setData({
      isModalShow: true
    });
  },

  /**
   * 隐藏自定义弹窗
   */
  hideCustomModal() {
    this.setData({
      isModalShow: false
    });
  },

  /**
   * 监听输入框内容变化
   */
  onPhoneInput(e) {
    this.setData({
      phone: e.detail.value
    });
  },

  /**
   * 新增：监听邮箱输入框内容变化
   */
  onEmailInput(e) {
    this.setData({
      email: e.detail.value
    });
  },

  /**
   * 新增：监听验证码输入框内容变化（仅邮箱登录用）
   */
  onCodeInput(e) {
    this.setData({
      code: e.detail.value
    });
  },

  /**
   * 新增：切换登录类型方法
   */
  switchLoginType() {
    // 切换时重置验证码相关状态（仅邮箱登录需要）
    this.setData({
      loginType: this.data.loginType === 'phone' ? 'email' : 'phone',
      code: '', // 切换回手机号时清空验证码
      codeText: "获取验证码",
      isCounting: false,
      countDown: 60
    });
  },

/**
 * 获取验证码按钮点击事件（适配后端 @RequestParam）
 */
getVerificationCode() {
  const that = this;
  if (this.data.isCounting) return;

  const email = this.data.email;
  const emailReg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
  if (!emailReg.test(email)) {
    wx.showToast({ title: '请输入有效的邮箱', icon: 'none' });
    return;
  }

  // 调用封装的 request，指定表单格式请求头
  request({
    url: '/sendVerifyCode',
    method: 'POST',
    data: {
      email: email // 传递邮箱参数
    },
    // 关键：设置为表单格式，适配后端 @RequestParam
    header: {
      'content-type': 'application/x-www-form-urlencoded'
    },
    loadingText: '发送验证码中...',
    errorText: '发送验证码失败，请重试',
    success(res) {
      if (res.data.code === 200) { // 若依的 R.ok() 返回 code 为 200
        wx.showToast({ title: res.data.msg || '验证码发送成功', icon: 'none' });
        that.startCountDown();
      } else {
        wx.showToast({ title: res.data.msg || '验证码发送失败', icon: 'none' });
      }
    }
  });
},

  /**
   * 新增：验证码倒计时逻辑（仅邮箱登录用）
   */
  startCountDown() {
    const that = this;
    this.setData({
      isCounting: true,
      codeText: `${this.data.countDown}s后重新获取`
    });

    const timer = setInterval(() => {
      let currentCount = that.data.countDown - 1;
      if (currentCount <= 0) {
        clearInterval(timer);
        that.setData({
          countDown: 60,
          codeText: "获取验证码",
          isCounting: false
        });
      } else {
        that.setData({
          countDown: currentCount,
          codeText: `${currentCount}s后重新获取`
        });
      }
    }, 1000);
  },

  /**
   * 点击“登录”按钮，执行登录逻辑（区分手机号/邮箱）
   */
  confirmLogin() {
    const that = this;
    if (this.data.loginType === 'phone') {
      // 手机号登录：无需验证码，仅校验手机号
      const phone = this.data.phone;
      if (!this.isValidPhone(phone)) {
        wx.showToast({
          title: '请输入有效的手机号',
          icon: 'none'
        });
        return;
      }
      // 调用原有手机号登录函数（无验证码）
      this.login(phone);

    } else {
      // 邮箱登录：需校验邮箱和验证码
      const email = this.data.email;
      const code = this.data.code;
      const emailReg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;

      if (!emailReg.test(email)) {
        wx.showToast({ title: '请输入有效的邮箱', icon: 'none' });
        return;
      }
      if (!code) {
        wx.showToast({ title: '请输入验证码', icon: 'none' });
        return;
      }
      // 调用邮箱登录函数（带验证码）
      this.emailLogin(email, code);
    }
  },

  /**
   * 手机号校验函数 (与方案一相同)
   */
  isValidPhone(phone) {
    const reg = /^1[3-9]\d{9}$/;
    return reg.test(phone);
  },
  toBack() {
    wx.navigateBack();
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})